package is.ru.honn.rupin.service;

import is.ru.honn.rupin.domain.Board;
import is.ru.honn.rupin.domain.Gender;
import is.ru.honn.rupin.domain.Pin;
import is.ru.honn.rupin.domain.User;

/**
 * Created by: Susanne
 * Date: 11.10.2012
 * Time: 09:55
 * copyright (c) sigruninga&susanne
 *
 * @author Sigrún Inga kristindóttir og Susanne Götz
 * @version 1.0
 */
public class TestPinService
{
    // erum að testa föllin í PinServiceStub
    PinServiceStub pss = new PinServiceStub();

    public static void main(String[] args)
    {
         new TestPinService();
    }

    /**
     * Smíður sem kallar á test föllin
     */
    public TestPinService()
    {
        testSignUpUser();
        testBoard();
        testPin();
    }

    // test fyrir SignUpUser()
    public void testSignUpUser()
    {
        try
        {
            // búum til nokkkra "harðkóðaða" User
            pss.signUpUser("Firstuser", "First", "User1", "user1@ru.is","password", Gender.FEMALE );
            pss.signUpUser("Seconduser", "Second", "User2", "user2@ru.is","password", Gender.MALE );
            pss.signUpUser("Thirduser", "Third", "User3", "user3@ru.is","password", Gender.FEMALE );
            pss.signUpUser("Fourthuser", "Fourth", "User4", "user4@ru.is","password", Gender.UNSPECIFIED );
            // athugum ef við fáum exception ef við skráum sama User aftur
            pss.signUpUser("Thirduser", "Third", "User3", "user3@ru.is","password", Gender.FEMALE );
        }
        catch (UsernameExistsException uee)
        {
            System.out.println(uee.getMessage());
        }
        for (User notandi : pss.users)
        {
            // prentum út alla User til að sjá ef skráning þeirra tókst
            System.out.println(notandi);
        }
    }

    // testum createBoard. Í createBoard verður kallað á getUser, Board smíð, getCreator og add
    public void testBoard()
    {
        try
        {
           // búum til nokkur "harðkóðuð" borð
            pss.createBoard("Firstuser", "FirstBoard", "category1");
            pss.createBoard("Firstuser", "SecondBoard", "category2");
            pss.createBoard("Seconduser", "ThirdBoard", "category1");
            // tilfelli þar sem við eigum að fá "UserNotFoundException
            pss.createBoard("Fifthuser", "FourthBoard", "category1");

        }
        catch(UserNotFoundException uex)
        {
           System.out.println(uex.getMessage());
        }
        for (Board board : pss.boards)
        {
           // prentum út öll board til að sjá að allar upplýsingar voru rétt skráðir
           System.out.println(board.getCreator().getUsername() + " " + board.getName() + " " + board.getCategory() );
        }
    }

    // testum createPin. Í createPin verður kallað á tóman Pin smíð, getBoard, set föllin í Pin og addPin
    public void testPin()
    {
        try
        {
            // búum til nokkur "harðkóðuð" pins
            pss.createPin("Firstuser", "FirstBoard", "http://link", "description");
            pss.createPin("Firstuser", "SecondBoard", "http://link", "description");
            // tilfelli þar sem við eigum að fá "BoardNotFoundException
            pss.createPin("Firstuser", "ThirdBoard", "http://link", "description");
        }
        catch (BoardNotFoundException bex)
        {
             System.out.println(bex.getMessage());
        }
        for (Board board : pss.boards)
        {
            for(Pin pin : pss.getPinsOnBoard(board.getCreator().getUsername(),board.getName()))
            {
                // prentum út allar upplýsingar til að sjá að allar upplýsingar hafa komist til skila
                System.out.println(board.getName() + " " + pin.getLink() + " " + pin.getDescription()+
                                                         " " + pin.getCreator());
            }
        }
    }
}
